home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-11-21 | 1.6 KB | 58 lines | [TEXT/KAHL] |
- short FullFileName(StringPtr outname, StringPtr tail, short volume, long dirID);
-
- short FullFileName(StringPtr outname, StringPtr tail, short volume, long dirID)
- { StringHandle name; Str255 text, volname; HVolumeParam hvp;
- CInfoPBRec di; long size; short err;
-
- /* extract the volume name */
- hvp.ioNamePtr = volname;
- hvp.ioVRefNum = volume;
- hvp.ioVolIndex = 0;
- PBHGetVInfo((HParmBlkPtr)&hvp, false);
- if (hvp.ioVSigWord == 0xd2d7) { outname[0] = 0; return wrgVolTypErr; }
-
- /* create and initialize the name handle */
- if (tail) {
- if (err = PtrToHand(tail + 1, &name, tail[0])) return err;
- size = tail[0];
- }
- else { if ((name = (StringHandle)NewHandle(0)) == 0) return MemError();
- size = 0;
- }
-
- /* now start extracting the dirs and prepending them to
- * the handle
- */
- for ( ; dirID != 2; dirID = di.dirInfo.ioDrParID) {
- text[0] = 0;
- di.dirInfo.ioNamePtr = text;
- di.dirInfo.ioVRefNum = volume;
- di.dirInfo.ioFDirIndex = -1;
- di.dirInfo.ioDrDirID = dirID;
- PBGetCatInfo(&di, false);
- text[++text[0]] = ':';
- SetHandleSize(name, size += text[0]);
- BlockMove((Ptr)*name, (Ptr)(*name) + text[0], size - text[0]);
- BlockMove((Ptr)text + 1, (Ptr)*name, text[0]);
- }
-
- /* prepend the volume name onto the handle */
- volname[++volname[0]] = ':';
- SetHandleSize(name, size += volname[0]);
- BlockMove((Ptr)*name, (Ptr)(*name) + volname[0], size - volname[0]);
- BlockMove((Ptr)volname + 1, (Ptr)*name, volname[0]);
-
- /* copy and delete the handle */
- if (size > 255) {
- DisposHandle(name);
- SysBeep(12);
- outname[0] = 0;
- return bdNamErr;
- }
- outname[0] = size;
- BlockMove((Ptr)*name, (Ptr)outname + 1, size);
- DisposHandle(name);
- return noErr;
- }
-
-